module OpenXml
  module DrawingML
    module Elements
      class PresetGeometry < OpenXml::Docx::Elements::Container
        namespace :a
        tag :prstGeom

        attribute :preset, expects: :valid_geometry_preset, displays_as: :prst

      private

        def valid_geometry_preset(value)
          message = "Invalid preset geometry: #{value}"
          raise ArgumentError, message unless ok_values.include? value
        end

        def ok_values
          %i( accentBorderCallout1
              accentBorderCallout2
              accentBorderCallout3
              accentCallout1
              accentCallout2
              accentCallout3
              actionButtonBackPrevious
              actionButtonBeginning
              actionButtonBlank
              actionButtonDocument
              actionButtonEnd
              actionButtonForwardNext
              actionButtonHelp
              actionButtonHome
              actionButtonInformation
              actionButtonMovie
              actionButtonReturn
              actionButtonSound
              arc
              bentArrow
              bentConnector2
              bentConnector3
              bentConnector4
              bentConnector5
              bentUpArrow
              bevel
              blockArc
              borderCallout1
              borderCallout2
              borderCallout3
              bracePair
              bracketPair
              callout1
              callout2
              callout3
              can
              chartPlus
              chartStar
              chartX
              chevron
              chord
              circularArrow
              cloud
              cloudCallout
              corner
              cornerTabs
              cube
              curvedConnector2
              curvedConnector3
              curvedConnector4
              curvedConnector5
              curvedDownArrow
              curvedLeftArrow
              curvedRightArrow
              curvedUpArrow
              decagon
              diagStripe
              diamond
              dodecagon
              donut
              doubleWave
              downArrow
              downArrowCallout
              ellipse
              ellipseRibbon
              ellipseRibbon2
              flowChartAlternateProcess
              flowChartCollate
              flowChartConnector
              flowChartDecision
              flowChartDelay
              flowChartDisplay
              flowChartDocument
              flowChartExtract
              flowChartInputOutput
              flowChartInternalStorage
              flowChartMagneticDisk
              flowChartMagneticDrum
              flowChartMagneticTape
              flowChartManualInput
              flowChartManualOperation
              flowChartMerge
              flowChartMultidocument
              flowChartOfflineStorage
              flowChartOffpageConnector
              flowChartOnlineStorage
              flowChartOr
              flowChartPredefinedProcess
              flowChartPreparation
              flowChartProcess
              flowChartPunchedCard
              flowChartPunchedTape
              flowChartSort
              flowChartSummingJunction
              flowChartTerminator
              foldedCorner
              frame
              funnel
              gear6
              gear9
              halfFrame
              heart
              heptagon
              hexagon
              homePlate
              horizontalScroll
              irregularSeal1
              irregularSeal2
              leftArrow
              leftArrowCallout
              leftBrace
              leftBracket
              leftCircularArrow
              leftRightArrow
              leftRightArrowCallout
              leftRightCircularArrow
              leftRightRibbon
              leftRightUpArrow
              leftUpArrow
              lightningBolt
              line
              lineInv
              mathDivide
              mathEqual
              mathMinus
              mathMultiply
              mathNotEqual
              mathPlus
              moon
              nonIsoscelesTrapazoid
              noSmoking
              notchedRightArrow
              octagon
              parallelogram
              pentagon
              pie
              pieWedge
              plaque
              plaqueTabs
              plus
              quadArrow
              quadArrowCallout
              rect
              ribbon
              ribbon2
              rightArrow
              rightArrowCallout
              rightBrace
              rightBracket
              round1Rect
              round2DiagRect
              round2SameRect
              roundRect
              rtTriangle
              smileyFace
              snip1Rect
              snip2DiagRect
              snip2SameRect
              snipRoundRect
              squareTabs
              star10
              star12
              star16
              star24
              star32
              star4
              star5
              star6
              star7
              star8
              straightConnector1
              stripedRightArrow
              sun
              swooshArrow
              teardrop
              trapezoid
              triangle
              upArrow
              upArrowCallout
              upDownArrow
              upDownArrowCallout
              uturnArrow
              verticalScroll
              wave
              wedgeEllipseCallout
              wedgeRectCallout
              wedgeRoundRectCallout ) # Office Open XML spec section 20.1.10.55
        end

      end
    end
  end
end
